/*
 *  Copyright 2013 National Institute of Advanced Industrial Science and Technology
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.sss.mapreduce.example;

import org.sss.mapreduce.Output;
import org.sss.mapreduce.Reducer;
import org.sss.mapreduce.datatype.PackableBytes;
import org.sss.mapreduce.datatype.PackableInt;

public class KeyCountValConcatReducer extends Reducer {
  public void reduce(Context context,
                     PackableBytes key, Iterable<PackableBytes> values,
                     Output<PackableBytes, PackableInt> output0,
                     Output<PackableBytes, PackableBytes> output1) throws Exception {
    int count = 0;
    byte[] tmp = null;
    for (PackableBytes v: values) {
      count++;
      if (tmp == null) {
        tmp = v.get();
      }
      else {
        byte[] head = tmp;
        byte[] tail = v.get();
        byte[] tmp_ = new byte[head.length + tail.length];
        System.arraycopy(head, 0, tmp_, 0, head.length);
        System.arraycopy(tail, 0, tmp_, head.length, tail.length);
        tmp = tmp_;
      }
    }
    output0.write(key, new PackableInt(count));
    output1.write(key, new PackableBytes(tmp));
  }
}
